package com.xczl.demo.service;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;

import com.xczl.demo.dao.UserDao;
import com.xczl.demo.dao.UserLevelDao;
import com.xczl.demo.domain.User;
import com.xczl.demo.domain.UserLevel;

@Service
@Transactional
public class UserService {

	@Autowired
	private UserDao userDao;

	@Autowired
	private UserLevelDao userLevelDao;

	/**
	 * 添加用户
	 * 
	 * @param user
	 */
	public void addUser(User user) {
		Assert.notNull(user, "用户实体不能为空");
		// 用户名不能为空
		Assert.hasText(user.getUserName(), "用户名必须有值");
		// 密码不能为空
		Assert.hasText(user.getPassword(), "密码不能为空");
		// 姓名为空设置为空字符串
		if (StringUtils.isEmpty(user.getName())) {
			user.setName("");
		}
		// 性别不能为空
		Assert.notNull(user.getSex(), "性别不能为空");
		// 初始化用户级别
		user.setLevelId(1);
		// 用户级别必须存在
		UserLevel level = userLevelDao.findById(user.getLevelId());
		Assert.notNull(level, "用户级别不存在");
		// 用户名不能被使用
		User temp = userDao.findByUserName(user.getUserName());
		Assert.isNull(temp, "用户名已经被使用");
		userDao.insertUser(user);
	}

	/**
	 * 根据ID获取用户
	 * 
	 * @param id
	 * @return
	 */
	public User findById(int id) {
		return userDao.findById(id);
	}

	/**
	 * 检测用户名和密码
	 * 
	 * @param username
	 * @param password
	 * @return
	 */
	public User login(String username, String password) {
		User user = userDao.findByUserName(username);
		Assert.notNull(user);
		if (StringUtils.equals(password, user.getPassword())) {
			return user;
		}
		return null;
	}

	/**
	 * 编辑用户信息
	 * 
	 * @return
	 */
	public void editUser(User user) {
		Assert.notNull(user, "用户实体不能为空");
		// 用户ID不能为空
		Assert.notNull(user.getUserId(), "用户不存在");
		// 姓名为空设置为空字符串
		if (StringUtils.isEmpty(user.getName())) {
			user.setName("");
		}
		// 性别不能为空
		Assert.notNull(user.getSex(), "性别不能为空");
		userDao.updateUser(user);
	}

	/**
	 * 编辑用户信息
	 * 
	 * @return
	 */
	public void modifyPassword(int userId, String oldPassword,
			String newPassword) {
		// 密码不能为空
		Assert.hasText(newPassword, "密码不能为空");
		// 密码不能为空
		Assert.hasText(oldPassword, "旧密码不能为空");
		User user = userDao.findById(userId);
		Assert.notNull(user, "用户不存在");
		Assert.isTrue(StringUtils.equals(oldPassword, user.getPassword()),
				"密码不正确");
		userDao.updatePassword(newPassword, userId);
	}
}
